import type { FormRules } from "element-plus";

// 中文产品名称验证规则（只允许中文、数字、空格、连字符和括号）
const productNameCnRules = [
  {
    required: true,
    message: "请输入产品名称(中文)",
    trigger: "blur"
  },
  {
    min: 2,
    max: 100,
    message: "产品名称长度应在2-100个字符之间",
    trigger: "blur"
  },
  {
    pattern: /^[\u4e00-\u9fa50-9\s\-\(\)（）]+$/,
    message: "产品名称只能包含中文、数字、空格、连字符和括号",
    trigger: "blur"
  }
];

// 英文产品名称验证规则（只允许英文、数字、空格、连字符、括号、&、.和逗号）
const productNameEnRules = [
  {
    required: true,
    message: "请输入产品名称(英文)",
    trigger: "blur"
  },
  {
    min: 2,
    max: 100,
    message: "英文产品名称长度应在2-100个字符之间",
    trigger: "blur"
  },
  {
    pattern: /^[a-zA-Z0-9\s\-\(\)&.,]+$/,
    message: "英文产品名称只能包含英文、数字、空格、连字符、括号、&、.和逗号",
    trigger: "blur"
  }
];

// 产品类别验证规则（只允许中文、英文、数字、空格、连字符和括号）
const productCategoryRules = [
  {
    required: true,
    message: "请输入产品类别",
    trigger: "blur"
  },
  {
    min: 2,
    max: 50,
    message: "产品类别长度应在2-50个字符之间",
    trigger: "blur"
  },
  {
    pattern: /^[\u4e00-\u9fa5a-zA-Z0-9\s\-\(\)（）]+$/,
    message: "产品类别只能包含中文、英文、数字、空格、连字符和括号",
    trigger: "blur"
  }
];

// 产品简介验证规则（只允许中文、英文、数字、空格、连字符、括号、逗号和句号）
const productIntroRules = [
  {
    required: true,
    message: "请输入产品简介",
    trigger: "blur"
  },
  {
    min: 10,
    max: 200,
    message: "产品简介长度应在10-200个字符之间",
    trigger: "blur"
  },
  {
    pattern: /^[\u4e00-\u9fa5a-zA-Z0-9\s\-\(\)（）.,，。]+$/,
    message: "产品简介只能包含中文、英文、数字、空格、连字符、括号、逗号和句号",
    trigger: "blur"
  }
];

// 产品图片验证规则
const productImageRules = [
  {
    required: true,
    message: "请上传产品图片",
    trigger: "change"
  }
];

// 导出验证规则
export const productFormRules: FormRules = {
  product_name_cn: productNameCnRules,
  product_name_en: productNameEnRules,
  product_category: productCategoryRules,
  product_intr: productIntroRules,
  product_img: productImageRules
};

// 验证产品图片文件
export const validateProductImage = (file: File) => {
  const errors: string[] = [];

  // 检查文件类型
  const allowedTypes = ['image/jpeg', 'image/jpg', 'image/png'];
  if (!allowedTypes.includes(file.type)) {
    errors.push("产品图片格式必须是JPG、PNG或JPEG");
  }

  // 检查文件大小（5MB）
  const maxSize = 5 * 1024 * 1024;
  if (file.size > maxSize) {
    errors.push("产品图片文件大小不能超过5MB");
  }

  // 检查文件名长度
  if (file.name.length > 100) {
    errors.push("产品图片文件名长度不能超过100个字符");
  }

  return {
    isValid: errors.length === 0,
    errors
  };
};

// 表单整体验证
export const validateProductForm = (form: any) => {
  const errors: string[] = [];

  // 验证必填字段
  if (!form.product_name_cn?.trim()) {
    errors.push("请输入产品名称(中文)");
  }

  if (!form.product_name_en?.trim()) {
    errors.push("请输入产品名称(英文)");
  }

  if (!form.product_category?.trim()) {
    errors.push("请输入产品类别");
  }

  if (!form.product_intr?.trim()) {
    errors.push("请输入产品简介");
  }

  if (!form.product_img?.trim()) {
    errors.push("请上传产品图片");
  }

  return {
    isValid: errors.length === 0,
    errors
  };
};
